package com.desire.homework;


public class _10_计算100以内的素数和 {
    /**
     * 大于1的能被1和其本身整除的数叫素数
     * <p>
     * 方法一：循环遍历：
     * 设要判断的数为i
     * 利用for(int j=2;j<=i;j++)循环把2到它本身i的数都遍历一遍，
     * 在遍历的过程中如果i%j==0，就记录这个数j
     * 判断i是否和j相等，若i==j，就说明该数是素数。
     *
     * @author desire
     */
    public static void main1(String[] args) {
        //和
        int sum = 0;
        // 计数
        int count = 0;
        for (int i = 2; i <= 100; i++) {
            for (int j = 2; j <= i; j++) {
                //能整除,两数又不相等, 说明不是素数 ,直接跳出循环   首先排除了不是素数的数
                if (i % j == 0 && i != j) {
                    break;
                }

                if (j == i) {
                    //每打印 5 个 进行换行
                    if (count % 5 == 0) {
                        System.out.println();
                    }
                    System.out.print(j + " ");
                    sum += j;
                    count++;
                }
            }
        }
        System.out.printf("\n一共有: %d 个素数, 和为: %d", count, sum);
    }

    /**
     * 我们可以想到如果i有除了它本身之外的因子
     * 那这个因子一定小于等于i/2（1*i=i，2*(i/2）=i)
     *
     * @param args
     */
    public static void main(String[] args) {
        // 和
        int sum = 0;
        // 计数
        int count = 0;

        for (int i = 2; i < 101; i++) {
            // 首先将 2 输出(特殊)
            if (i == 2) {
                System.out.print(2 + " ");
                continue;
            }
            // 判断是否是 素数 , 默认都是素数(true)
            boolean flag = true;
            for (int j = 2; j <= i / 2; j++) {
                // 因为 j <= i/2  所以 就不会出现两数相等  取模为0 则说明不是素数 break
                if (i % j == 0) {
                    flag = false;
                    break;
                }
            }
            // 若 flag 是true 则是素数
            if (flag) {
                sum += i;
                count++;
                if (count % 5 == 0) {
                    System.out.println();
                }
                System.out.print(i + " ");
            }
        }
        //因为for循环里没有包含素数2，所以输出结果是count+1   和也 + 2
        System.out.printf("\n一共有: %d 个素数, 和为: %d", count + 1, sum + 2);
    }
}
